2006-07-16 Matthias Clasen <mclasen@redhat.com>
+ * gdk-pixbuf-loader.c (gdk_pixbuf_loader_load_module)
+ (gdk_pixbuf_loader_write, gdk_pixbuf_loader_close)
+ (gdk_pixbuf_loader_ensure_error): Put the code to protect
+ against broken loaders that forget to set error in an
+ auxiliary function and call it in more places. (#346428,
+ Catmur)
+
* io-xbm.c: Fix incremental loading of
xbms. (#346427, Ed Catmur)
Also make the xbm loader accept const variations.
MIN (height, gdk_pixbuf_animation_get_height (priv->animation)));
}
+/* Defense against broken loaders; DO NOT take this as a GError example! */
+static void
+gdk_pixbuf_loader_ensure_error (GdkPixbufLoader *loader,
+ GError **error)
+{
+ GdkPixbufLoaderPrivate *priv = loader->priv;
+
+ if (error == NULL || *error != NULL)
+ return;
+
+ g_warning ("Bug! loader '%s' didn't set an error on failure",
+ priv->image_module->module_name);
+ g_set_error (error,
+ GDK_PIXBUF_ERROR,
+ GDK_PIXBUF_ERROR_FAILED,
+ _("Internal error: Image loader module '%s' failed to"
+ " complete an operation, but didn't give a reason for"
+ " the failure"),
+ priv->image_module->module_name);
+}
+
static gint
gdk_pixbuf_loader_load_module (GdkPixbufLoader *loader,
const char *image_type,
if (priv->context == NULL)
{
- /* Defense against broken loaders; DO NOT take this as a GError
- * example
- */
- if (error && *error == NULL)
- {
- g_warning ("Bug! loader '%s' didn't set an error on failure",
- priv->image_module->module_name);
- g_set_error (error,
- GDK_PIXBUF_ERROR,
- GDK_PIXBUF_ERROR_FAILED,
- _("Internal error: Image loader module '%s'"
- " failed to begin loading an image, but didn't"
- " give a reason for the failure"),
- priv->image_module->module_name);
-
- }
-
+ gdk_pixbuf_loader_ensure_error (loader, error);
return 0;
}
eaten = gdk_pixbuf_loader_eat_header_write (loader, buf, count, error);
if (eaten <= 0)
- return FALSE;
+ {
+ gdk_pixbuf_loader_ensure_error (loader, error);
+ return FALSE;
+ }
count -= eaten;
buf += eaten;
gboolean retval;
retval = priv->image_module->load_increment (priv->context, buf, count,
error);
- if (!retval && error && *error == NULL)
- {
- /* Fix up busted image loader */
- g_warning ("Bug! loader '%s' didn't set an error on failure",
- priv->image_module->module_name);
- g_set_error (error,
- GDK_PIXBUF_ERROR,
- GDK_PIXBUF_ERROR_FAILED,
- _("Internal error: Image loader module '%s'"
- " failed to begin loading an image, but didn't"
- " give a reason for the failure"),
- priv->image_module->module_name);
- }
+ if (!retval)
+ gdk_pixbuf_loader_ensure_error (loader, error);
return retval;
}
if (priv->image_module && priv->image_module->stop_load && priv->context)
{
if (!priv->image_module->stop_load (priv->context, error))
- retval = FALSE;
+ {
+ gdk_pixbuf_loader_ensure_error (loader, error);
+ retval = FALSE;
+ }
}
priv->closed = TRUE;